package com.liljhu30.microdianping.utils;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;

/**
 * @author LilJHu
 * @create 2023/12/15
 * @desc 登录拦截器
 **/
public class LoginInterceptor implements HandlerInterceptor {

    /**
     * 在请求处理前执行，返回true表示继续处理，返回false表示中断处理链
     *
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        // 获取请求路径（相对路径）
        String requestPath = request.getRequestURI();
        // 获取完整的URL（包括主机名和端口号）
        String fullRequestURL = request.getRequestURL().toString();
        // 打印请求路径
        System.out.println("Relative Request Path: " + requestPath);
        System.out.println("Full Request URL: " + fullRequestURL);
        // 1.判断是否需要拦截（ThreadLocal中是否有用户）
        if (UserHolder.getUser() == null) {
            // 没有，需要拦截，设置状态码
            response.setStatus(401);
            // 拦截
            return false;
        }
        // 有用户，则放行
        return true;
    }
}
